1use std::fmt;
2use libc;
3
4#[repr(u32)]
5#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
6pub enum ud_type {
7 UD_NONE = 0,
8 UD_R_AL = 1,
9 UD_R_CL = 2,
10 UD_R_DL = 3,
11 UD_R_BL = 4,
12 UD_R_AH = 5,
13 UD_R_CH = 6,
14 UD_R_DH = 7,
15 UD_R_BH = 8,
16 UD_R_SPL = 9,
17 UD_R_BPL = 10,
18 UD_R_SIL = 11,
19 UD_R_DIL = 12,
20 UD_R_R8B = 13,
21 UD_R_R9B = 14,
22 UD_R_R10B = 15,
23 UD_R_R11B = 16,
24 UD_R_R12B = 17,
25 UD_R_R13B = 18,
26 UD_R_R14B = 19,
27 UD_R_R15B = 20,
28 UD_R_AX = 21,
29 UD_R_CX = 22,
30 UD_R_DX = 23,
31 UD_R_BX = 24,
32 UD_R_SP = 25,
33 UD_R_BP = 26,
34 UD_R_SI = 27,
35 UD_R_DI = 28,
36 UD_R_R8W = 29,
37 UD_R_R9W = 30,
38 UD_R_R10W = 31,
39 UD_R_R11W = 32,
40 UD_R_R12W = 33,
41 UD_R_R13W = 34,
42 UD_R_R14W = 35,
43 UD_R_R15W = 36,
44 UD_R_EAX = 37,
45 UD_R_ECX = 38,
46 UD_R_EDX = 39,
47 UD_R_EBX = 40,
48 UD_R_ESP = 41,
49 UD_R_EBP = 42,
50 UD_R_ESI = 43,
51 UD_R_EDI = 44,
52 UD_R_R8D = 45,
53 UD_R_R9D = 46,
54 UD_R_R10D = 47,
55 UD_R_R11D = 48,
56 UD_R_R12D = 49,
57 UD_R_R13D = 50,
58 UD_R_R14D = 51,
59 UD_R_R15D = 52,
60 UD_R_RAX = 53,
61 UD_R_RCX = 54,
62 UD_R_RDX = 55,
63 UD_R_RBX = 56,
64 UD_R_RSP = 57,
65 UD_R_RBP = 58,
66 UD_R_RSI = 59,
67 UD_R_RDI = 60,
68 UD_R_R8 = 61,
69 UD_R_R9 = 62,
70 UD_R_R10 = 63,
71 UD_R_R11 = 64,
72 UD_R_R12 = 65,
73 UD_R_R13 = 66,
74 UD_R_R14 = 67,
75 UD_R_R15 = 68,
76 UD_R_ES = 69,
77 UD_R_CS = 70,
78 UD_R_SS = 71,
79 UD_R_DS = 72,
80 UD_R_FS = 73,
81 UD_R_GS = 74,
82 UD_R_CR0 = 75,
83 UD_R_CR1 = 76,
84 UD_R_CR2 = 77,
85 UD_R_CR3 = 78,
86 UD_R_CR4 = 79,
87 UD_R_CR5 = 80,
88 UD_R_CR6 = 81,
89 UD_R_CR7 = 82,
90 UD_R_CR8 = 83,
91 UD_R_CR9 = 84,
92 UD_R_CR10 = 85,
93 UD_R_CR11 = 86,
94 UD_R_CR12 = 87,
95 UD_R_CR13 = 88,
96 UD_R_CR14 = 89,
97 UD_R_CR15 = 90,
98 UD_R_DR0 = 91,
99 UD_R_DR1 = 92,
100 UD_R_DR2 = 93,
101 UD_R_DR3 = 94,
102 UD_R_DR4 = 95,
103 UD_R_DR5 = 96,
104 UD_R_DR6 = 97,
105 UD_R_DR7 = 98,
106 UD_R_DR8 = 99,
107 UD_R_DR9 = 100,
108 UD_R_DR10 = 101,
109 UD_R_DR11 = 102,
110 UD_R_DR12 = 103,
111 UD_R_DR13 = 104,
112 UD_R_DR14 = 105,
113 UD_R_DR15 = 106,
114 UD_R_MM0 = 107,
115 UD_R_MM1 = 108,
116 UD_R_MM2 = 109,
117 UD_R_MM3 = 110,
118 UD_R_MM4 = 111,
119 UD_R_MM5 = 112,
120 UD_R_MM6 = 113,
121 UD_R_MM7 = 114,
122 UD_R_ST0 = 115,
123 UD_R_ST1 = 116,
124 UD_R_ST2 = 117,
125 UD_R_ST3 = 118,
126 UD_R_ST4 = 119,
127 UD_R_ST5 = 120,
128 UD_R_ST6 = 121,
129 UD_R_ST7 = 122,
130 UD_R_XMM0 = 123,
131 UD_R_XMM1 = 124,
132 UD_R_XMM2 = 125,
133 UD_R_XMM3 = 126,
134 UD_R_XMM4 = 127,
135 UD_R_XMM5 = 128,
136 UD_R_XMM6 = 129,
137 UD_R_XMM7 = 130,
138 UD_R_XMM8 = 131,
139 UD_R_XMM9 = 132,
140 UD_R_XMM10 = 133,
141 UD_R_XMM11 = 134,
142 UD_R_XMM12 = 135,
143 UD_R_XMM13 = 136,
144 UD_R_XMM14 = 137,
145 UD_R_XMM15 = 138,
146 UD_R_YMM0 = 139,
147 UD_R_YMM1 = 140,
148 UD_R_YMM2 = 141,
149 UD_R_YMM3 = 142,
150 UD_R_YMM4 = 143,
151 UD_R_YMM5 = 144,
152 UD_R_YMM6 = 145,
153 UD_R_YMM7 = 146,
154 UD_R_YMM8 = 147,
155 UD_R_YMM9 = 148,
156 UD_R_YMM10 = 149,
157 UD_R_YMM11 = 150,
158 UD_R_YMM12 = 151,
159 UD_R_YMM13 = 152,
160 UD_R_YMM14 = 153,
161 UD_R_YMM15 = 154,
162 UD_R_RIP = 155,
163 UD_OP_REG = 156,
164 UD_OP_MEM = 157,
165 UD_OP_PTR = 158,
166 UD_OP_IMM = 159,
167 UD_OP_JIMM = 160,
168 UD_OP_CONST = 161,
169}
170
171#[repr(C)]
172#[derive(Clone, Copy)]
173pub union ud_lval {
174 pub sbyte: i8,
175 pub ubyte: u8,
176 pub sword: i16,
177 pub uword: u16,
178 pub sdword: i32,
179 pub udword: u32,
180 pub sqword: i64,
181 pub uqword: u64,
182 pub ptr: ud_lval_ptr,
183}
184
185impl fmt::Debug for ud_lval {
186 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
187 write!(f, "ud_lval {{ union }}")
188 }
189}
190
191#[repr(C)]
192#[derive(Debug, Copy, Clone)]
193pub struct ud_lval_ptr {
194 pub seg: u16,
195 pub off: u32,
196}
197
198#[repr(C)]
199#[derive(Debug, Copy, Clone)]
200pub struct ud_operand {
201 pub otype: ud_type,
202 pub size: u16,
203 pub base: ud_type,
204 pub index: ud_type,
205 pub scale: u8,
206 pub offset: u8,
207 pub lval: ud_lval,
208 pub _legacy: u64,
209 pub _oprcode: u8,
210}
211
212#[repr(C)]
213pub struct ud {
214 pub inp_hook: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ud) -> libc::c_int>,
218 pub inp_file: *mut libc::FILE,
219 pub inp_buf: *const u8,
220 pub inp_buf_size: usize,
221 pub inp_buf_index: usize,
222 pub inp_curr: u8,
223 pub inp_ctr: usize,
224 pub inp_sess: [u8; 64usize],
225 pub inp_end: libc::c_int,
226 pub inp_peek: libc::c_int,
227
228 pub translator: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ud)>,
229 pub insn_offset: u64,
230 pub insn_hexcode: [libc::c_char; 64usize],
231
232 pub asm_buf: *mut libc::c_char,
236 pub asm_buf_size: usize,
237 pub asm_buf_fill: usize,
238 pub asm_buf_int: [libc::c_char; 128usize],
239
240 pub sym_resolver: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ud, addr: u64, offset: *mut i64) -> *const libc::c_char>,
244
245 pub dis_mode: u8,
246 pub pc: u64,
247 pub vendor: u8,
248 pub mnemonic: ::itab::ud_mnemonic_code,
249 pub operand: [ud_operand; 4usize],
250 pub error: u8,
251 pub _rex: u8,
252 pub pfx_rex: u8,
253 pub pfx_seg: u8,
254 pub pfx_opr: u8,
255 pub pfx_adr: u8,
256 pub pfx_lock: u8,
257 pub pfx_str: u8,
258 pub pfx_rep: u8,
259 pub pfx_repe: u8,
260 pub pfx_repne: u8,
261 pub opr_mode: u8,
262 pub adr_mode: u8,
263 pub br_far: u8,
264 pub br_near: u8,
265 pub have_modrm: u8,
266 pub modrm: u8,
267 pub modrm_offset: u8,
268 pub vex_op: u8,
269 pub vex_b1: u8,
270 pub vex_b2: u8,
271 pub primary_opcode: u8,
272 pub user_opaque_data: *mut libc::c_void,
273 pub itab_entry: *mut (),
274 pub le: *mut (),
275}